'''
1，安装selenium
	-- 命令：pip install selenium

2，打开百度，输入chrome webdriver，下载谷歌浏览器webdriver驱动
	-- http://npm.taobao.org/mirrors/chromedriver/
	-- 根据自己谷歌版本选择驱动器
	-- 选择对应版本，如果没有对应版本选择跟谷歌版本相近但不超过谷歌版本的
	-- 下载后解压

3，拷贝到python安装路径
	-- 找到Lib目录
	-- 进入site-packages目录，将下载好的webdriver驱动放进该目录文件里

4，配置环境变量
	-- 将webdriver驱动所在文件路径复制
	-- 添加到系统环境变量里的Path路径里

5，验证是否配置完成
	-- from selenium import webdriver
	   a = webdriver.Chrome()
	   a.get('https://www.baidu.com/')


6，如果上述操作报错，执行以下方法：
	-- 将下载的驱动放入python环境的Scripts的文件夹里
	-- 再将路径添加到环境变量（如果安装python时勾选了自动添加环境变量这步可省略）

7，上述两种方法还报错，执行以下方法：
	-- 将下载的驱动放进项目根目录
'''
import json
import sys
import time
from selenium import webdriver  # # 驱动浏览器
from selenium.webdriver.common.by import By  # 选择器
from selenium.webdriver.common.keys import Keys  # 按键
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载完毕，寻找某些元素
from selenium.webdriver.support import expected_conditions as EC  ##等待指定标签加载完毕
from selenium.webdriver import ChromeOptions
from bs4 import BeautifulSoup
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from bs4 import BeautifulSoup
class Spider():
    def __init__(self):
        # 登录
        self.url = 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fsearch.jd.com%2FSearch%3Fkeyword%3D%25E7%25BE%258E%25E9%25A3%259F%26qrst%3D1%26wq%3D%25E7%25BE%258E%25E9%25A3%259F%26stock%3D1%26pvid%3Da972f1a6c3f0482ca048335478556bf0%26page%3D197%26s%3D5881%26click%3D0'
        # 目标站点  首页
        # self.url = 'https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_b695d529e34a4936993c5394c0b7c208'
        # 伪装
        self.options = webdriver.ChromeOptions()
        self.options.add_experimental_option('excludeSwitches', ['enable-automation'])
        self.browser = webdriver.Chrome(options=self.options)

    # 访问京东
    def get_jd(self):
        self.browser.get(self.url)

        # 点击微信登录
        # self.browser.find_element_by_xpath('//*[@id="kbCoagent"]/ul/li[2]/a/span').click()
        # 点击QQ
        self.browser.find_element_by_xpath('//*[@id="kbCoagent"]/ul/li[1]/a/span').click()

        # 等待事件
        wait = WebDriverWait(self.browser,280)
        wait.until(EC.presence_of_element_located((By.ID,'key')))

        # 查找输入框 并且输入关键词
        text_input = self.browser.find_element_by_id('key')
        text_input.clear()  # 清空
        text_input.send_keys('美食')
        text_input.send_keys(Keys.ENTER)
        time.sleep(1.5)

    # 获取源码
    def get_data(self):
        page_index = 1
        while True:
            self.browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
            time.sleep(1.5)
            print('当前正在获取第{}页数据'.format(page_index))
            print('当前访问的页面URL为：',self.browser.current_url)  # 查看网页URL
            data = self.browser.page_source  # 查看网页源码
            # print(data)
            self.parse_data(data)

            # 等待下一页按钮
            wait = WebDriverWait(self.browser, 280)
            wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'pn-next')))
            # 找到下一页按钮
            # //*[@id="J_bottomPage"]/span[1]/a[9]/em  不能翻页的下一页
            try:
                self.browser.find_element_by_xpath('//*[@id="J_bottomPage"]/span[1]/a[9][@class="pn-next"]/em').click()
            except NoSuchElementException as a:
                print(a)
                print('已经爬取完毕~')
                sys.exit(0)
            page_index+=1

    # 解析数据
    def parse_data(self,data):
        soup = BeautifulSoup(data,'lxml')
        name = soup.select('.gl-i-wrap .p-name.p-name-type-2 em')  # 商品名
        price = soup.select('.gl-i-wrap strong i')  # 价格
        print(len(name))
        shop_info = {}  # 定义空字典
        for names,prices in zip(name,price):
            n = names.get_text()
            p = prices.get_text()
            print(n)
            print(p)
            print('='*20)
            shop_info['商品名字'] =n
            shop_info['商品价格'] =p
            with open('shop_data.json','a',encoding='utf-8')as f:
                f.write(json.dumps(shop_info,ensure_ascii=False)+',\n')

if __name__ == '__main__':
    a = Spider()
    a.get_jd()
    a.get_data()

